// @ts-ignore
import _ from 'lodash'

/**
 * 在调用 formatDate 函数时。例如，yyyy 会被替换成年份的四位数，dd 会被替换成日期的两位数。如果占位符不在格式字符串中出现，那么它将被忽略
 * @param date 第一个参数是一个 Date 对象，
 * @param format 第二个参数是一个格式字符串。格式字符串可以包含 yyyy、yy、MM、M、dd、d、HH、H、mm、m、ss、s、SSS 和 S 这些占位符，它们会被替换成对应的日期时间值
 * @returns {*}
 */
interface _date {
    _date: Date,
    format: string
}

export function formatDate(_date: Date, format: string) {
    format = format || 'yyyy-MM-dd HH:mm:ss'
    const year = _date.getFullYear();
    const month = _date.getMonth() + 1;
    const day = _date.getDate();
    const hour = _date.getHours();
    const minute = _date.getMinutes();
    const second = _date.getSeconds();
    const millisecond = _date.getMilliseconds();

    const formatOptions = {
        yyyy: year,
        yy: year.toString().slice(-2),
        MM: month.toString().padStart(2, '0'),
        M: month,
        dd: day.toString().padStart(2, '0'),
        d: day,
        HH: hour.toString().padStart(2, '0'),
        H: hour,
        mm: minute.toString().padStart(2, '0'),
        m: minute,
        ss: second.toString().padStart(2, '0'),
        s: second,
        SSS: millisecond.toString().padStart(3, '0'),
        S: millisecond,
    };

    // @ts-ignore
    return format.replace(/yyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s|SSS|S/g, match => formatOptions[match]);
}


/***
 * 计算输入阳历日期到今天的时间
 * @param date
 * @returns number
 */
function daysFromToday(date: Date) {
    // 将输入日期和今天的日期都转换为时间戳（单位为毫秒）
    const inputDate = new Date(date).getTime();
    const today = new Date().getTime();

    // 计算两个时间戳之间的毫秒差异，然后将其转换为天数
    const differenceInMs = inputDate - today;
    const differenceInDays = Math.floor(differenceInMs / (1000 * 60 * 60 * 24));

    // 返回天数差异
    return differenceInDays;
}

export function copyObjDeep(source: object, target: object) {
    let temp = _.cloneDeep(source)
    _.assign(target, temp)
}

export function getCopy(src: object) {
    let r = {}
    copyObjDeep(src, r)
    return r
}

/**
 * 输入url,query
 * 进行路由跳转把query内容拼接到url后?xx=xx&xx=xx
 * @param url
 * @param query
 */
export function routerJump(url: string, query: object | undefined = {}) {
    // 将 query 对象转换为 URL 查询参数字符串
    const queryString = Object.keys(query)
        .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((query as any)[key])}`)
        .join('&');

    // 拼接 URL 和查询参数
    const finalUrl = queryString ? `${url}?${queryString}` : url;

    // 进行路由跳转
    uni.switchTab({
        url: finalUrl
    });
}

// 示例调用
routerJump('/pages/dateList/index', {name: 'John', age: 30});

